﻿Imports System.Data.SqlClient
Imports UTNComputers.clsVidriera
Imports UTNComputers.clsCatalogo
Imports UTNComputers.daoCatalogo
Public Class daoVidriera
    'Funcion para el alta de Vidriera'
    Public Function Alta(ByVal Vidriera As clsVidriera) As Boolean
        Dim Cn As New SqlConnection
        Dim Cm As New SqlCommand

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_ALTA_VIDRIERA"

            Cm.Parameters.Add("@vid_id", SqlDbType.Int)
            Cm.Parameters.Add("@prod_id", SqlDbType.Int)
            Cm.Parameters.Add("@nro_serie", SqlDbType.VarChar)
            Cm.Parameters.Add("@fecha_alta", SqlDbType.SmallDateTime)
            Cm.Parameters.Add("@estado", SqlDbType.VarChar)
            Cm.Parameters.Add("@fecha_baja", SqlDbType.SmallDateTime)
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)

            Cm.Parameters("@vid_id").Value = Vidriera.Vid_Id
            Cm.Parameters("@prod_id").Value = Vidriera.Prod_Id
            Cm.Parameters("@nro_serie").Value = Vidriera.Nro_Serie
            Cm.Parameters("@fecha_alta").Value = Vidriera.Fecha_Alta
            Cm.Parameters("@estado").Value = Vidriera.Estado
            Cm.Parameters("@fecha_baja").Value = Convert.ToDateTime("01/01/1900")
            Cm.Parameters("@Cod_Suc").Value = Vidriera.Cod_Suc

            Cm.Connection = Cn

            Cm.ExecuteNonQuery()
            Cn.Close()
            Return True

        Catch ex As Exception
            Return False
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para la modificacion Vidriera'
    Public Function Modificar(ByVal Vidriera As clsVidriera) As Boolean
        Dim Cn As New SqlConnection
        Dim Cm As New SqlCommand

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_MODI_VIDRIERA"

            Cm.Parameters.Add("@vid_id", SqlDbType.Int)
            Cm.Parameters.Add("@prod_id", SqlDbType.Int)
            Cm.Parameters.Add("@nro_serie", SqlDbType.VarChar)
            Cm.Parameters.Add("@fecha_alta", SqlDbType.SmallDateTime)
            Cm.Parameters.Add("@estado", SqlDbType.VarChar)
            Cm.Parameters.Add("@fecha_baja", SqlDbType.SmallDateTime)
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)

            Cm.Parameters("@vid_id").Value = Vidriera.Vid_Id
            Cm.Parameters("@prod_id").Value = Vidriera.Prod_Id
            Cm.Parameters("@nro_serie").Value = Vidriera.Nro_Serie
            Cm.Parameters("@fecha_alta").Value = Vidriera.Fecha_Alta
            Cm.Parameters("@estado").Value = Vidriera.Estado
            Cm.Parameters("@fecha_baja").Value = Vidriera.Fecha_Baja
            Cm.Parameters("@Cod_Suc").Value = Vidriera.Cod_Suc


            Cm.Connection = Cn

            Cm.ExecuteNonQuery()
            Cn.Close()
            Return True

        Catch ex As Exception
            Return False
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer un articulo de Vidriera por ID'
    Public Function TraeVidriera(ByVal vid_id As Integer) As clsVidriera
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim Vidriera As New clsVidriera()

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_VIDRIERA"

            Cm.Parameters.Add("@vid_id", SqlDbType.Int)
            Cm.Parameters("@vid_id").Value = vid_id

            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Vidriera.Vid_Id = Dr.GetInt32(0)
                    Vidriera.Prod_Id = Dr.GetInt32(1)
                    Vidriera.Nro_Serie = Dr.GetString(2)
                    Vidriera.Fecha_Alta = Dr.GetDateTime(3)
                    Vidriera.Estado = Dr.GetString(4).Trim.ToUpper
                    If Dr.IsDBNull(5) Then
                        Vidriera.Fecha_Baja = Convert.ToDateTime("01/01/1999")
                    Else
                        Vidriera.Fecha_Baja = Dr.GetDateTime(5)
                    End If
                    Vidriera.Cod_Suc = Dr.GetInt32(6)

                    Dim Catalogo_Dao As New daoCatalogo()
                    Vidriera.Producto = Catalogo_Dao.TraeArticulo(Vidriera.Prod_Id)
                    Catalogo_Dao.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return Vidriera
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer un articulo de Vidriera por ID'
    Public Function TraeVidrieraProd(ByVal cli_id As Integer) As clsVidriera
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim Vidriera As New clsVidriera()

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_VIDRIERA_X_PROD"

            Cm.Parameters.Add("@prod_id", SqlDbType.Int)
            Cm.Parameters("@prod_id").Value = cli_id

            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Vidriera.Vid_Id = Dr.GetInt32(0)
                    Vidriera.Prod_Id = Dr.GetInt32(1)
                    Vidriera.Nro_Serie = Dr.GetString(2)
                    Vidriera.Fecha_Alta = Dr.GetDateTime(3)
                    Vidriera.Estado = Dr.GetString(4).Trim.ToUpper
                    If Dr.IsDBNull(5) Then
                        Vidriera.Fecha_Baja = Convert.ToDateTime("01/01/1999")
                    Else
                        Vidriera.Fecha_Baja = Dr.GetDateTime(5)
                    End If
                    Vidriera.Cod_Suc = Dr.GetInt32(6)

                    Dim Catalogo_Dao As New daoCatalogo()
                    Vidriera.Producto = Catalogo_Dao.TraeArticulo(Vidriera.Prod_Id)
                    Catalogo_Dao.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return Vidriera
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer Todos los articulos de vidriera que no fueron dados de baja'
    Public Function TraeVidrieras() As List(Of clsVidriera)
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim ListaVidriera As New List(Of clsVidriera)

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_VIDRIERA_ACTUAL"

            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Dim Vidriera As New clsVidriera()
                    Vidriera.Vid_Id = Dr.GetInt32(0)
                    Vidriera.Prod_Id = Dr.GetInt32(1)
                    Vidriera.Nro_Serie = Dr.GetString(2)
                    Vidriera.Fecha_Alta = Dr.GetDateTime(3)
                    Vidriera.Estado = Dr.GetString(4).Trim.ToUpper
                    If Dr.IsDBNull(5) Then
                        Vidriera.Fecha_Baja = Convert.ToDateTime("01/01/1999")
                    Else
                        Vidriera.Fecha_Baja = Dr.GetDateTime(5)
                    End If
                    Vidriera.Cod_Suc = Dr.GetInt32(6)

                    Dim Catalogo_Dao As New daoCatalogo()
                    Vidriera.Producto = Catalogo_Dao.TraeArticulo(Vidriera.Prod_Id)
                    Catalogo_Dao.Dispose()

                    ListaVidriera.Add(Vidriera)
                    Vidriera.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return ListaVidriera
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer Todos los articulos de vidriera Activos en un rango de fecha'
    Public Function TraeVidrierasActivos(ByVal Fecha_Desde As Date, ByVal Fecha_Hasta As Date) As List(Of clsVidriera)
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim ListaVidriera As New List(Of clsVidriera)

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_VIDRIERA_X_FECHA_ACTIVOS"

            Cm.Parameters.Add("@fecha_desde", SqlDbType.SmallDateTime)
            Cm.Parameters.Add("@fecha_hasta", SqlDbType.SmallDateTime)
            Cm.Parameters("@fecha_desde").Value = Fecha_Desde
            Cm.Parameters("@fecha_hasta").Value = Fecha_Hasta

            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Dim Vidriera As New clsVidriera()
                    Vidriera.Vid_Id = Dr.GetInt32(0)
                    Vidriera.Prod_Id = Dr.GetInt32(1)
                    Vidriera.Nro_Serie = Dr.GetString(2)
                    Vidriera.Fecha_Alta = Dr.GetDateTime(3)
                    Vidriera.Estado = Dr.GetString(4).Trim.ToUpper
                    If Dr.IsDBNull(5) Then
                        Vidriera.Fecha_Baja = Convert.ToDateTime("01/01/1999")
                    Else
                        Vidriera.Fecha_Baja = Dr.GetDateTime(5)
                    End If
                    Vidriera.Cod_Suc = Dr.GetInt32(6)

                    Dim Catalogo_Dao As New daoCatalogo()
                    Vidriera.Producto = Catalogo_Dao.TraeArticulo(Vidriera.Prod_Id)
                    Catalogo_Dao.Dispose()

                    ListaVidriera.Add(Vidriera)
                    Vidriera.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return ListaVidriera
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer Todos los articulos de vidriera (TODOS) en un rango de fecha'
    Public Function TraeVidrierasTodos(ByVal Fecha_Desde As Date, ByVal Fecha_Hasta As Date) As List(Of clsVidriera)
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim ListaVidriera As New List(Of clsVidriera)

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_VIDRIERA_X_FECHA_TODOS"

            Cm.Parameters.Add("@fecha_desde", SqlDbType.SmallDateTime)
            Cm.Parameters.Add("@fecha_hasta", SqlDbType.SmallDateTime)
            Cm.Parameters("@fecha_desde").Value = Fecha_Desde
            Cm.Parameters("@fecha_hasta").Value = Fecha_Hasta

            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Dim Vidriera As New clsVidriera()
                    Vidriera.Vid_Id = Dr.GetInt32(0)
                    Vidriera.Prod_Id = Dr.GetInt32(1)
                    Vidriera.Nro_Serie = Dr.GetString(2)
                    Vidriera.Fecha_Alta = Dr.GetDateTime(3)
                    Vidriera.Estado = Dr.GetString(4).Trim.ToUpper
                    If Dr.IsDBNull(5) Then
                        Vidriera.Fecha_Baja = Convert.ToDateTime("01/01/1999")
                    Else
                        Vidriera.Fecha_Baja = Dr.GetDateTime(5)
                    End If
                    Vidriera.Cod_Suc = Dr.GetInt32(6)

                    Dim Catalogo_Dao As New daoCatalogo()
                    Vidriera.Producto = Catalogo_Dao.TraeArticulo(Vidriera.Prod_Id)
                    Catalogo_Dao.Dispose()

                    ListaVidriera.Add(Vidriera)
                    Vidriera.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return ListaVidriera
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    '---------------------------------------------------------------------
    ' Constructor de la Clase
    '---------------------------------------------------------------------
    Public Sub New()

        MyBase.New()

    End Sub

    '---------------------------------------------------------------------
    ' Destructor de la Clase
    '---------------------------------------------------------------------
    Public Sub Dispose()

        MyBase.Finalize()

    End Sub

End Class
